<?php
class Usuario extends AppModel {
	var $name = 'Usuario';
	var $actsAs = array('Acl' => array('requester'));
	var $belongsTo = array(
		'Grupo' => array(
			'className' => 'Grupo',
			'foreignKey' => 'grupo_id',
			'conditions' => '',
			'fields' => '',
			'order' => ''
		)
	);
		
	var $validate = array(
		'username' => array(
			'alphaNumeric' => array(
				'rule' => 'alphaNumeric',
				'message' => 'El nombre de usuario debe ser alfanumérico.',
				'required' => true,
				'allowEmpty' => false,
				'last' => true
			),
			'tamanio' => array(
				'rule' => array('between', 6, 36),
        		'message' => 'El nombre de usuario debe tener un largo entre 6 y 36 caracteres.',
				'last' => true
			),
			'noVacio' => array(
				'rule' => 'notEmpty',
				'message' => 'Se debe proporcionar un nombre de usuario.',
				'last' => true, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
			'unico' => array(
				'rule' => 'isUnique',
				'message' => 'El nombre de usuario ya existe.',
				'last' => true, // Stop validation after this rule
			),
		),
		'password' => array(
			'tamanio' => array(
				'rule' => array('minLength', '8'),
        		'message' => 'La contraseña debe tener un largo mínimo de 8 caracteres.',
				'last' => true
			),
			'noVacio' => array(
				'rule' => 'notEmpty',
				'message' => 'Verifica que la contraseña no esté vacía.',
				'allowEmpty' => false,
				'required' => true,
				'last' => true
			),
			'igual' => array(
				'rule' => array('valoresCampoIguales', 'password2'),
				'message' => 'Verifica que la contraseña sea igual a la confirmación de la contraseña.',
				'allowEmpty' => false,
				'required' => true,
				'last' => true, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			)
		),
		'password2' => array(
			'noVacio' => array(
				'rule' => 'notEmpty',
				'message' => 'Verifica que la confirmación de la contraseña no esté vacía.',
				'allowEmpty' => false,
				'required' => true,
				'last' => true // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			),
			'igual' => array(
				'rule' => array('valoresCampoIguales', 'password'),
				'message' => 'Verifica que la confirmación de la contraseña sea igual a la contraseña.',
				'allowEmpty' => false,
				'required' => true,
				'last' => true, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			)
		),
		'grupo_id' => array(
			'noVacio' => array(
				'rule' => 'notempty',
				'message' => 'Se debe seleccionar un grupo para el nuevo usuario.',
				'allowEmpty' => false,
				'required' => true,
				//'last' => false, // Stop validation after this rule
				//'on' => 'create', // Limit validation to 'create' or 'update' operations
			)
		),
	);
	
	 
	function parentNode() {
	    if (!$this->id && empty($this->data)) {
	        return null;
	    }
	    $data = $this->data;
	    if (empty($this->data)) {
	        $data = $this->read();
	    }
	    if (!$data['Usuario']['grupo_id']) {
	        return null;
	    } else {
	        return array('Grupo' => array('id' => $data['Usuario']['grupo_id']));
	    }
	}
	
	function bindNode($user) {
		return array('model' => 'Grupo', 'foreign_key' => $user['Usuario']['grupo_id']);
	}
	
	function identicalFieldValues( $field = array(), $compare_field = null ) {
        foreach( $field as $key => $value ){ 
            $v1 = $value; 
            $v2 = $this->data[$this->name][ $compare_field ];                  
            if($v1 !== $v2) { 
                return FALSE; 
            } else { 
                continue; 
            } 
        } 
        return TRUE; 
		
    }
	
	function valoresCampoIguales( $campo = array(), $campo_comparado = null ) {
		if(isset($this->data[$this->name][ $campo_comparado ])) {	
			foreach( $campo as $clave => $valor ){ 
	        	$v1 = $valor; 
	            $v2 = $this->data[$this->name][ $campo_comparado ];

	            if($v1 !== $v2) {
	                return false; 
	            } else { 
	                continue; 
	            } 
        } 
			return true;
		} else {
			return false;
		}
    }
}
?>